// 前端js的加密和解密工具
import CryptoJS from 'crypto-js'
// import RsaEncrypt from './rsaEncrypt'

// 秘钥和初始化向量的定义
const KEY_STRING = "AOWQ4P0YEC4YXUKS";
// 使用十六位十六进制数作为秘钥
const KEY = CryptoJS.enc.Utf8.parse(KEY_STRING);
// 十六位十六进制数作为秘钥偏移量
const IV = CryptoJS.enc.Utf8.parse("O3V2GCL1K2HNZ9Y7");

export default {

    // 使用aes加密密码进行传输
    encrypt(password: string, keyStr: string) {
        // 将密码和密钥转化为wordArray格式
        const passwordWordArray = CryptoJS.enc.Utf8.parse(password);
        const keyWordArray = CryptoJS.enc.Utf8.parse(keyStr);
        // 加密
        const encrypted = CryptoJS.AES.encrypt(passwordWordArray, keyWordArray, {
            // aes加密模式ecb模式
            mode: CryptoJS.mode.ECB,
            // 填充方式
            padding: CryptoJS.pad.Pkcs7
        });
        // 返回base64格式的密文
        return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
    },

    // 使用aes加密用户的基本信息
    encryptUserInfo(userInfo: any) {
        let userInfoStr = ""
        if (typeof userInfo === 'object') {
            // 将用户信息转化为字符串
            userInfoStr = JSON.stringify(userInfo);
        }else{
            userInfoStr = userInfo
        }
        // 将用户信息转化为wordArray格式
        const userInfoWordArray = CryptoJS.enc.Utf8.parse(userInfoStr);
        // 加密
        const encrypted = CryptoJS.AES.encrypt(userInfoWordArray, KEY, {
            iv: IV,
            // aes加密模式ecb模式
            mode: CryptoJS.mode.ECB,
            // 填充方式
            padding: CryptoJS.pad.Pkcs7
        });
        // 返回base64格式的密文
        return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
    },

    // 解密用户的基本信息
    decryptUserInfo(userInfoStr: string) {
        // 将字符串转化为base64格式，并转化为CryptoJS格式
        let base64 = CryptoJS.enc.Base64.parse(userInfoStr);
        let src = CryptoJS.enc.Base64.stringify(base64);
        // 解密
        const decrypted = CryptoJS.AES.decrypt(src, KEY, {
            iv: IV,
            // aes加密模式ecb模式
            mode: CryptoJS.mode.ECB,
            // 填充方式
            padding: CryptoJS.pad.Pkcs7
        });
        // 解密后的明文
        return CryptoJS.enc.Utf8.stringify(decrypted).toString();
    },

}